package NO7_Hash;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 2025-08-14
 * 力扣 - 242. 有效的字母异位词
 * <p>
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的 字母异位词。
 */
public class IsAnagramMain {
    public static void main(String[] args) {
        System.out.println(isAnagram("anagram", "nagaram"));
    }

    // Hash 表
//    public static boolean isAnagram(String s, String t) {
//        int sLength = s.length();
//        if (sLength != t.length()) {
//            return false;
//        }
//
//        char[] sCharArray = s.toCharArray();
//        HashMap<Character, Integer> map = new HashMap<>();
//        for (int i = 0; i < sLength; i++) {
//            if (map.containsKey(sCharArray[i])) {
//                map.put(sCharArray[i], map.get(sCharArray[i]) + 1);
//            } else {
//                map.put(sCharArray[i], 1);
//            }
//        }
//
//        char[] tCharArray = t.toCharArray();
//        for (int i = 0; i < sLength; i++) {
//            if (map.containsKey(tCharArray[i])) {
//                map.put(tCharArray[i], map.get(tCharArray[i]) - 1);
//                if (map.get(tCharArray[i]) == 0) {
//                    map.remove(tCharArray[i]);
//                }
//            } else {
//                return false;
//            }
//        }
//
//        return true;
//    }

    // 数组
//    public static boolean isAnagram(String s, String t) {
//        int sLength = s.length();
//        if (sLength != t.length()) {
//            return false;
//        }
//
//        char[] tCharArray = t.toCharArray();
//        char[] sCharArray = s.toCharArray();
//
//        for (int i = 0; i < sLength; i++){
//            for (int j = 0; j < sLength; j++){
//                if (sCharArray[i] == tCharArray[j]){
//                    tCharArray[j] = ' ';
//                    break;
//                }
//            }
//        }
//
//        for (char c : tCharArray){
//            if (c != ' '){
//                return false;
//            }
//        }
//        return true;
//    }

    // 排序后比较
    public static boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }

        char[] result = new char[s.length()];
        System.arraycopy(s, 0, result, 0, s.length());

        char[] sCharArray = result;
        char[] tCharArray = t.toCharArray();

        // 排序两个字符串
        Arrays.sort(sCharArray);
        Arrays.sort(tCharArray);

        // 比较两个排序后的字符串
        return Arrays.equals(sCharArray, tCharArray);
    }
}
